//package com.kerraway.config;
//
//import com.alibaba.druid.pool.DruidDataSource;
//import com.mysql.jdbc.Driver;
//import io.shardingsphere.core.api.ShardingDataSourceFactory;
//import io.shardingsphere.core.rule.ShardingRule;
//import io.shardingsphere.core.rule.TableRule;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//import javax.sql.DataSource;
//import java.util.Arrays;
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * @author 小柯
// * @date 2018/9/5
// */
//@Configuration
//public class DataSourceConfig {
//  @Bean
//  public DataSource getDataSource() {
//    return buildDataSource();
//  }
//
//  private DataSource buildDataSource() {
//    //设置分库映射
//    Map<String, DataSource> dataSourceMap = new HashMap<>(2);
//    //添加两个数据库ds_0,ds_1到map里
//    dataSourceMap.put("ds_0", createDataSource("ds_0"));
//    dataSourceMap.put("ds_1", createDataSource("ds_1"));
//    //设置默认db为ds_0，也就是为那些没有配置分库分表策略的指定的默认库
//    //如果只有一个库，也就是不需要分库的话，map里只放一个映射就行了，只有一个库时不需要指定默认库，但2个及以上时必须指定默认库，否则那些没有配置策略的表将无法操作数据
//    DataSourceRule dataSourceRule = new DataSourceRule(dataSourceMap, "ds_0");
//
//    //设置分表映射，将t_order_0和t_order_1两个实际的表映射到t_order逻辑表
//    //0和1两个表是真实的表，t_order是个虚拟不存在的表，只是供使用。如查询所有数据就是select * from t_order就能查完0和1表的
//    TableRule orderTableRule = TableRule.builder("t_order")
//        .actualTables(Arrays.asList("t_order_0", "t_order_1"))
//        .dataSourceRule(dataSourceRule)
//        .build();
//
//    //具体分库分表策略，按什么规则来分
//    ShardingRule shardingRule = ShardingRule.builder()
//        .dataSourceRule(dataSourceRule)
//        .tableRules(Arrays.asList(orderTableRule))
//        .databaseShardingStrategy(new DatabaseShardingStrategy("user_id", new ModuloDatabaseShardingAlgorithm()))
//        .tableShardingStrategy(new TableShardingStrategy("order_id", new ModuloTableShardingAlgorithm())).build();
//
//    DataSource dataSource = ShardingDataSourceFactory.createDataSource(shardingRule);
//
//    return dataSource;
//  }
//
//  /**
//   * 使用 druid 连接数据库
//   *
//   * @param dataSourceName
//   * @return DataSource
//   */
//  private DataSource createDataSource(final String dataSourceName) {
//    DruidDataSource dataSource = new DruidDataSource();
//    dataSource.setDriverClassName(Driver.class.getName());
//    dataSource.setUrl(String.format("jdbc:mysql://localhost:3306/%s", dataSourceName));
//    dataSource.setUsername("root");
//    dataSource.setPassword("12345678");
//    return dataSource;
//  }
//}